Security Hubで個人的によく使うAWS CLIコマンドをまとめてみた
こんにちは。たかやまです。
セキュリティサービスの設定はみなさんどのようにされていますか?
コンソール、AWS CLI、CloudFormation、Terraform等、様々な方法があると思います。
私自身セキュリティサービスの場合は、一度きりの設定だったりCloudFormationで設定できないOrganizations連携機能などもあるため、なんだかんだAWS CLIを使う機会が多いです。
ただその度に、コマンドを調べている気がします...
そこで、ほぼ自分用になりますが個人的によく使うSecurity HubのAWS CLIコマンドをまとめてみました。
注意事項
- 執筆当時のAWS CLIバージョンは
aws-cli/2.13.29
- 記載のコマンドは一部を除き有効リージョン全てに対して実行するように作成しています
- パラメータについてはお使いの環境に合わせて適宜変更してください
- 事前に動作確認はしていますが、実行は自己責任でお願いします
Security Hub
作成: Security Hubの有効化
- デフォルトのセキュリティ基準は無効
aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \ | while read region; do echo "### Enable Security Hub in ${region}" aws securityhub enable-security-hub \ --no-enable-default-standards \ --region ${region} done
enable-security-hub — AWS CLI Command Reference
更新: Security Hubのセキュリティ基準の有効化と無効化
- 有効
- FSBP
- CIS1.4
- NIST
- 無効
- CIS1.2
account_id=$(aws sts get-caller-identity --query 'Account' --output text) aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \ | while read region; do echo "### Processing region: ${region}" # enable FSBP echo "# Enable FSBP, CIS 1.4, NIST, PCI DSS" aws securityhub batch-enable-standards \ --standards-subscription-requests '[ {"StandardsArn":"arn:aws:securityhub:'${region}'::standards/aws-foundational-security-best-practices/v/1.0.0"}, {"StandardsArn":"arn:aws:securityhub:'${region}'::standards/cis-aws-foundations-benchmark/v/1.4.0"}, {"StandardsArn":"arn:aws:securityhub:'${region}'::standards/nist-800-53/v/5.0.0"}, {"StandardsArn":"arn:aws:securityhub:'${region}'::standards/pci-dss/v/3.2.1"} ]' \ --region ${region} # disable CIS 1.2 echo "# Disable CIS 1.2" aws securityhub batch-disable-standards \ --standards-subscription-arns '[ "arn:aws:securityhub:'${region}':'${account_id}':standards/cis-aws-foundations-benchmark/v/1.2.0" ]' \ --region ${region} done
batch-enable-standards — AWS CLI Command Reference batch-disable-standards — AWS CLI Command Reference
更新: メンバーアカウント招待承諾
Security Hub管理アカウントで実行
- 集約アカウントでの招待作成
accounts=(xxxxxxxxxxxx xxxxxxxxxxxx) aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \ | while read region; do echo "### Create and invite a Member in ${region}" for account in ${accounts[@]}; do echo "# Create Member" aws securityhub create-members \ --account-details '[{"AccountId": "'${account}'"}]' \ --region ${region} echo "# Invite member" aws securityhub invite-members \ --account-ids ${account} \ --region ${region} done done
create-members — AWS CLI Command Reference invite-members — AWS CLI Command Reference
各メンバーアカウントで実行
- メンバーアカウントでの承認
administrator_id=xxxxxxxxxxxx aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \ | while read region; do invitation_id=$(aws securityhub list-invitations --query "Invitations[].[InvitationId]" --output text --region ${region}) echo "### Accept invitation in ${region}" if [ -n "${invitation_id}" ]; then aws securityhub accept-administrator-invitation \ --administrator-id ${administrator_id} \ --invitation-id ${invitation_id} \ --region ${region} echo "OK" else echo "InvitationId Not Found" fi done
accept-administrator-invitation — AWS CLI Command Reference
更新: アカウント委任(Organizations限定)
Organization管理アカウントで実行
xxxxxxxxxxxx(アカウントID)
に委任する
admin_account=xxxxxxxxxxxx aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \ | while read region; do echo "### Enable organization admin account in ${region}" aws securityhub enable-organization-admin-account \ --admin-account-id ${admin_account} \ --region ${region} done
enable-organization-admin-account — AWS CLI Command Reference
更新: 自動有効化の設定(Organizations限定)
Security Hub管理アカウントで実行
- Auto-enable accounts : オン
- Auto-enable default standards : オフ
aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \ | while read region; do echo "##### Enable auto-enable(Disable default standards) in ${region}" aws securityhub update-organization-configuration \ --auto-enable \ --auto-enable-standards NONE \ --region ${region} if [[ $? -eq 0 ]]; then echo "OK" fi done
update-organization-configuration — AWS CLI Command Reference
更新: メンバーアカウントを追加する(Organizations限定)
Security Hub管理アカウントで実行
- Organizations配下の
xxxxxxxxxxxx(アカウントID)
をメンバーアカウントとして追加する
accounts=(xxxxxxxxxxxx xxxxxxxxxxxx) aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \ | while read region; do echo "### Create Member in ${region}" for account in ${accounts[@]}; do aws securityhub create-members \ --account-details AccountId=${account} \ --region ${region} done done
create-members — AWS CLI Command Reference
更新: 抑制する検出結果にノートを追加する
参照: Security Hub有効化確認
- Security Hubの有効化状態を確認
- 有効化されている場合は、有効なセキュリティ基準とメンバーアカウントを表示
aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \ | while read region; do if aws securityhub describe-hub --region ${region} >/dev/null 2>&1; then echo "### Security Hub is enabled in ${region}" aws securityhub get-enabled-standards \ --query StandardsSubscriptions[].[StandardsArn,StandardsStatus] \ --region ${region} \ --output table aws securityhub list-members \ --query "Members[].[AccountId,MemberStatus]" \ --region ${region} \ --output table else echo "### Security Hub is disabled in ${region}" fi done
get-enabled-standards — AWS CLI Command Reference
list-members — AWS CLI Command Reference
参照: 管理者アカウント確認
各メンバーアカウントで実行
- 管理者アカウントを確認
aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \ | while read region; do if aws securityhub describe-hub --region ${region} >/dev/null 2>&1; then echo "### Security Hub is enabled in ${region}" echo "# Checking Administrator Account" admin_account=$(aws securityhub get-administrator-account --region ${region} --output text) if [ $? -eq 0 ] && [ -n "${admin_account}" ]; then aws securityhub get-administrator-account --region ${region} --output table else echo "No Administrator Account found for Security Hub" fi else echo "### Security Hub is disabled in ${region}" fi done
get-administrator-account — AWS CLI Command Reference
参照: Auto-enable設定の確認(Organizations限定)
Security Hub管理アカウントで実行
- Security Hubの有効化状態を確認
- 有効化されている場合は、有効なセキュリティ基準とAuto-Enable設定を表示
aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \ | while read region; do if aws securityhub describe-hub --region ${region} >/dev/null 2>&1; then echo "### Security Hub is enabled in ${region}" aws securityhub get-enabled-standards \ --query StandardsSubscriptions[].[StandardsArn,StandardsStatus] \ --region ${region} \ --output table aws securityhub describe-organization-configuration \ --query "{AutoEnable: AutoEnable, AutoEnableStandards: AutoEnableStandards}" \ --region ${region} \ --output table else echo "### Security Hub is disabled in ${region}" fi done
get-enabled-standards — AWS CLI Command Reference
describe-organization-configuration — AWS CLI Command Reference
参照: ワークフロー/コントロールステータスで無効にしているものの確認
削除: 全リージョンSecurity Hubの無効化
- Security Hubの無効化
aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \ | while read region; do echo "### Disable Security Hub in ${region}" aws securityhub disable-security-hub \ --region ${region} done
disable-security-hub — AWS CLI Command Reference
削除: 管理者アカウントとの関連付けを解除
招待で管理されている各メンバーアカウントで実行
- メンバーアカウントの委任解除
aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \ | while read region; do echo "### Disassociate form administrator account in ${region}" aws securityhub disassociate-from-administrator-account \ --region ${region} done
disassociate-from-administrator-account — AWS CLI Command Reference
削除: メンバーアカウントの削除
Security Hub管理アカウントで実行
- Security Hubに関連付けされていないメンバーアカウントの削除
aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \ | while read region; do # Check if Security Hub is enabled in the region if aws securityhub describe-hub --region ${region} >/dev/null 2>&1; then member_account_ids=$(aws securityhub list-members --no-only-associated --query 'Members[].AccountId' --output text --region ${region}) # Check if there are any member accounts to delete if [ -n "${member_account_ids}" ]; then echo "### Deleting member account in region ${region}" # Delete the member account aws securityhub delete-members --account-ids ${member_account_ids} --region ${region} # Check if the deletion was successful if [ $? -eq 0 ]; then echo "Successfully deleted member account ${member_account_ids} from Security Hub in region ${region}" else echo "Failed to delete member account ${member_account_ids} from Security Hub in region ${region}" fi else echo "### No member accounts to delete in region ${region}" fi else echo "### Security Hub is not enabled in ${region}" fi done
delete-members — AWS CLI Command Reference
最後に
頻繁に使うコマンドがあれば、随時追加していきたいと思います。
この中から1つでも役に立つコマンドであれば幸いです。
以上、たかやま(@nyan_kotaroo)でした。